<?php
/**
 * 18、设计模式学习-命令模式
 * 吃烧烤控制器-模拟消费者
 * 2019年12月29日18:23:53
 */
namespace Application\Controller;

use Application\Common\Command\Server as Server;

class BarbecueCommandController extends BaseController
{
    // 命令模式，理解不难；就是 顾客-消费者、服务员-服务者|调度者、厨师-执行者 三者的关系
    public function index()
    {
        echo '提示：需要进入 Application\Common\Command 目录中，CLI 运行 执行者 Executor.class.php <hr />';
        exit('请检查，然后 注释 本行');
        $menus = array(
            1 => '烤一串羊肉串',
            2 => '烤一个鸡翅',
            3 => '来一杯啤酒',
        );
        // 产生随机数、随机点餐
        $number = mt_rand(1,3);
        $command = $menus[$number];
        // 实例化服务者
        $server = new Server();
        // 推送给服务者
        $server -> addCommand($command);
        // 当前订单为
        echo '当前订单为：'.$command.'<hr />';
        // 获得命令处理详情-获得订单处理详情
        $exec_menus = $server -> getExecCommandInfo();
        echo '当前已处理的订单为：';
        echo "<div style='color:red;'>";
        export($exec_menus['already_exec']);
        echo "</div>";
        echo '当前未处理的订单为：';
        export($exec_menus['not_exec']);
        // 总结：关键之处：理解此模式为数据驱动的模式，解耦请求者与数据之间以及执行者与数据之间的联系
        // 总结：根据不同的应用场景或实际情况，可以将 服务者 与 执行者 合并
        // 总结：解耦请求者与执行者之间的联系的理解为：一个烧烤店的 厨师、服务员、收银员、清洁员 其实 可以是一个人，但这样一个人的职责过多，就会难以维护，当一个流程更改时，就有可能会影响烧烤店的正常运营；所以一个类其实可以拥有所有的职责，但同时会变得难以维护，从而很大程度上会造成业务雪崩；所以解耦有时就是必要的
    }
}
